package org.bundlemaker.core.ui.view.problemview; import java.util.LinkedList; import java.util.List; import org.bundlemaker.core.analysis.IRootArtifact; import org.bundlemaker.core.parser.IParserAwareBundleMakerProject; import org.bundlemaker.core.parser.IProblem; import org.bundlemaker.core.selection.IArtifactSelection; import org.bundlemaker.core.ui.event.selection.workbench.view.AbstractArtifactSelectionAwareViewPart; import org.eclipse.jface.layout.TableColumnLayout; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.CellLabelProvider; import org.eclipse.jface.viewers.ColumnLabelProvider; import org.eclipse.jface.viewers.ColumnLayoutData; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; public class ProblemView extends AbstractArtifactSelectionAwareViewPart { public static final String PROBLEM_VIEW_ID = "org.bundlemaker.core.ui.view.problemview.ProblemView"; private final List<IProblem> EMPTY_PROBLEM_LIST = new LinkedList<IProblem>(); /** - */ private TableViewer _viewer; /* * (non-Javadoc) * * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite) */ @Override public void createPartControl(Composite parent) { FillLayout fillLayout = new FillLayout(); fillLayout.type = SWT.VERTICAL; parent.setLayout(fillLayout); Composite tableComposite = new Composite(parent, SWT.NONE); tableComposite.setLayout(new TableColumnLayout()); _viewer = new TableViewer(tableComposite, SWT.VIRTUAL | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION); final Table table = _viewer.getTable(); table.setHeaderVisible(true); table.setLinesVisible(true); _viewer.setContentProvider(ArrayContentProvider.getInstance()); createColumns(tableComposite, _viewer); } private void createColumns(Composite parent, TableViewer viewer) { createTableViewerColumn(parent, viewer, "Message", 80, new ColumnLabelProvider() { @Override public String getText(Object element) { IProblem problem = (IProblem) element; return problem.getMessage(); } @Override public Image getImage(Object element) { IProblem problem = (IProblem) element; if (problem.isError()) { return Images.ERROR_ICON.getImage(); } return Images.WARNING_ICON.getImage(); } }); createTableViewerColumn(parent, viewer, "Resource", 35, new ColumnLabelProvider() { @Override public String getText(Object element) { IProblem problem = (IProblem) element; return problem.getResource().getName(); } }); createTableViewerColumn(parent, viewer, "Path", 35, new ColumnLabelProvider() { @Override public String getText(Object element) { IProblem problem = (IProblem) element; return problem.getResource().getPath(); } }); createTableViewerColumn(parent, viewer, "Root", 35, new ColumnLabelProvider() { @Override public String getText(Object element) { IProblem problem = (IProblem) element; return problem.getResource().getRoot(); } }); createTableViewerColumn(parent, viewer, "Location", 20, new ColumnLabelProvider() { @Override public String getText(Object element) { IProblem problem = (IProblem) element; if (problem.getSourceLineNumber() >= 0) { return "line " + problem.getSourceLineNumber(); } return "unknown"; } }); } private TableViewerColumn createTableViewerColumn(Composite tableComposite, TableViewer viewer, String title, int weight, CellLabelProvider labelProvider) { final TableViewerColumn viewerColumn = new TableViewerColumn(viewer, SWT.NONE); final TableColumn column = viewerColumn.getColumn(); column.setText(title); column.setResizable(true); column.setMoveable(false); TableColumnLayout tableLayout = (TableColumnLayout) tableComposite.getLayout(); ColumnLayoutData columnLayoutData = new ColumnWeightData(weight); tableLayout.setColumnData(column, columnLayoutData); if (labelProvider != null) { viewerColumn.setLabelProvider(labelProvider); } return viewerColumn; } /* * (non-Javadoc) * * @see org.eclipse.ui.part.WorkbenchPart#setFocus() */ @Override public void setFocus() { // TODO Auto-generated method stub } /* * (non-Javadoc) * * @see org.bundlemaker.core.ui.event.selection.workbench.view.AbstractArtifactSelectionAwareViewPart# * setCurrentArtifactSelection(org.bundlemaker.core.ui.event.selection.IArtifactSelection) */ @Override protected void setCurrentArtifactSelection(IArtifactSelection artifactSelection) { super.setCurrentArtifactSelection(artifactSelection); initFromSelection(artifactSelection); } /** * @param artifactSelection */ private void initFromSelection(IArtifactSelection artifactSelection) { if (!artifactSelection.hasSelectedArtifacts()) { setModel(EMPTY_PROBLEM_LIST); return; } IRootArtifact rootArtifact = artifactSelection.getRootArtifact(); // Get project IParserAwareBundleMakerProject bundleMakerProject = rootArtifact.getModularizedSystem().getBundleMakerProject() .adaptAs(IParserAwareBundleMakerProject.class); // get associated problems List<IProblem> problems = bundleMakerProject.getProblems(); // set the model for the table setModel(problems); } protected void setModel(List<IProblem> problems) { if (problems == null) { problems = EMPTY_PROBLEM_LIST; } _viewer.setInput(problems); } /* * (non-Javadoc) * * @see org.bundlemaker.core.ui.event.selection.workbench.view.AbstractArtifactSelectionAwareViewPart#getProviderId() */ @Override protected String getProviderId() { return PROBLEM_VIEW_ID; } }